package ctx;


import java.util.List;
import javax.el.MethodExpression;
import javax.faces.application.Application;

import javax.faces.context.FacesContext;

import javax.faces.event.ActionEvent;

import javax.faces.event.MethodExpressionActionListener;

import model.Genre;
import service_metier.*;
import org.richfaces.component.html.HtmlPanelMenu;
import org.richfaces.component.html.HtmlPanelMenuGroup;
import org.richfaces.component.html.HtmlPanelMenuItem;



public class UserMenu {

	private HtmlPanelMenu panelMenu;
	
	
	public UserMenu() {
			// Creation du menu
			final Application application = FacesContext.getCurrentInstance().getApplication();
			this.panelMenu = (HtmlPanelMenu) application.createComponent(HtmlPanelMenu.COMPONENT_TYPE);
			
			// Options du menu
			this.panelMenu.getChildren().clear();
			this.panelMenu.setStyle("width:200px");
			this.panelMenu.setMode("server");
			this.panelMenu.setIconExpandedGroup("disc");
			this.panelMenu.setIconCollapsedGroup("disc");
			this.panelMenu.setIconExpandedTopGroup("chevronUp");
			this.panelMenu.setIconGroupTopPosition("right");
			this.panelMenu.setIconCollapsedTopGroup("chevronDown");
			
			buildMenuFilm(application);
			buildMenuPersonne(application);
		}
	
	//Création du menu pour les Films
	public void buildMenuFilm(Application application){
		
		
		// Récupération liste des menus
		List childrenGroupMenu = panelMenu.getChildren();
		
		//Création des menus pour "Films"
		HtmlPanelMenuGroup panelMenuGroupFilms = new HtmlPanelMenuGroup();
		panelMenuGroupFilms.setId("films");
		panelMenuGroupFilms.setLabel("Films");
		List childrenGroupFilms = panelMenuGroupFilms.getChildren();
		
		//Création du bouton "Tous les films"
		
		HtmlPanelMenuItem menuItemAllFilms = new HtmlPanelMenuItem();
		menuItemAllFilms.setId("allfilms");
		
		menuItemAllFilms.setLabel("Tous les Films");			
		
		Class<?>[] parameterList = new Class<?>[]{ActionEvent.class};
		
		MethodExpression me = application.getExpressionFactory().createMethodExpression(FacesContext.getCurrentInstance().getELContext(), "#{vueListeVideos.afficherAllFilm}", null, parameterList);
		MethodExpressionActionListener listener = new MethodExpressionActionListener(me); 
		
		menuItemAllFilms.addActionListener(listener);
		
		childrenGroupFilms.add(menuItemAllFilms);
		
		//Création des sous-menus pour "Films" par Genre
		HtmlPanelMenuGroup panelMenuGroupFilmsByGenre = new HtmlPanelMenuGroup();
		panelMenuGroupFilmsByGenre.setId("genre");
		panelMenuGroupFilmsByGenre.setLabel("Genre");
		List childrenGroupFilmsByGenre = panelMenuGroupFilmsByGenre.getChildren();
		
		//Création de bouton pour chaque Genre
		for(Genre g : Genre.values()){
			HtmlPanelMenuItem menuItemGenre = new HtmlPanelMenuItem();
			menuItemGenre.setId(g.getValue());
			menuItemGenre.setLabel(g.getValue());
			MethodExpression m = application.getExpressionFactory().createMethodExpression(FacesContext.getCurrentInstance().getELContext(), "#{vueListeVideos.afficherFilmByGenre}", null, parameterList);
			MethodExpressionActionListener list = new MethodExpressionActionListener(m); 
			menuItemGenre.addActionListener(list);
			
			childrenGroupFilmsByGenre.add(menuItemGenre);
		}
		
		
		childrenGroupFilms.add(panelMenuGroupFilmsByGenre);
		
		//Création du bouton Ajouter
		HtmlPanelMenuItem menuItemAjouterVideo = new HtmlPanelMenuItem();
		menuItemAjouterVideo.setId("ajoutervideo");		
		menuItemAjouterVideo.setLabel("Ajouter");
		MethodExpression me2 = application.getExpressionFactory().createMethodExpression(FacesContext.getCurrentInstance().getELContext(), "#{selectionVideo.ajouterFilm}", null, parameterList);
		MethodExpressionActionListener listener2 = new MethodExpressionActionListener(me2); 
		
		menuItemAjouterVideo.addActionListener(listener2);
		
		childrenGroupFilms.add(menuItemAjouterVideo);
		
		
		
		
		childrenGroupMenu.add(panelMenuGroupFilms);
	}
	//Création du menu pour les Personnes
	public void buildMenuPersonne(Application application){
		// Récupération liste des menus
		List childrenGroupMenu = panelMenu.getChildren();
		
		//Création des menus pour "Personne"
		HtmlPanelMenuGroup panelMenuGroupPersonne= new HtmlPanelMenuGroup();
		panelMenuGroupPersonne.setId("personne");
		panelMenuGroupPersonne.setLabel("Acteur/Realisateur");
		List childrenGroupPersonnes = panelMenuGroupPersonne.getChildren();
		
		//Création du bouton "Tous"
		
		HtmlPanelMenuItem menuItemAllPersonne= new HtmlPanelMenuItem();
		menuItemAllPersonne.setId("allpersonne");
		
		menuItemAllPersonne.setLabel("Tous");			
		
		Class<?>[] parameterList = new Class<?>[]{ActionEvent.class};
		
		MethodExpression me = application.getExpressionFactory().createMethodExpression(FacesContext.getCurrentInstance().getELContext(), "#{vueListePersonnes.afficherAllPersonne}", null, parameterList);
		MethodExpressionActionListener listener = new MethodExpressionActionListener(me); 
		
		menuItemAllPersonne.addActionListener(listener);
		childrenGroupPersonnes.add(menuItemAllPersonne);
		
		
		//Création des sous catégorie activité
		HtmlPanelMenuGroup panelMenuGroupPersonneByActivite = new HtmlPanelMenuGroup();
		panelMenuGroupPersonneByActivite.setId("activite");
		panelMenuGroupPersonneByActivite.setLabel("Activite");
		List childrenGroupPersonneByActivite = panelMenuGroupPersonneByActivite.getChildren();
		
		//Catégorie acteur
		HtmlPanelMenuItem menuItemActeur = new HtmlPanelMenuItem();
		menuItemActeur.setId("comedie");
		menuItemActeur.setLabel("Acteurs");
		MethodExpression m = application.getExpressionFactory().createMethodExpression(FacesContext.getCurrentInstance().getELContext(), "#{vueListePersonnes.afficherPersonneByActivite}", null, parameterList);
		MethodExpressionActionListener list = new MethodExpressionActionListener(m); 
		menuItemActeur.addActionListener(list);
		
		childrenGroupPersonneByActivite.add(menuItemActeur);
		
		HtmlPanelMenuItem menuItemRealisateur = new HtmlPanelMenuItem();
		menuItemRealisateur.setId("realisation");
		menuItemRealisateur.setLabel("Realisateurs");
		menuItemRealisateur.addActionListener(list);
		
		childrenGroupPersonneByActivite.add(menuItemRealisateur);
		
		childrenGroupPersonnes.add(panelMenuGroupPersonneByActivite);
		
		
		//Création du bouton Ajouter
		HtmlPanelMenuItem menuItemAjouterPersonne = new HtmlPanelMenuItem();
		menuItemAjouterPersonne.setId("ajouterpersonne");		
		menuItemAjouterPersonne.setLabel("Ajouter");
		MethodExpression me2 = application.getExpressionFactory().createMethodExpression(FacesContext.getCurrentInstance().getELContext(), "#{modificationPersonne.ajouterPersonne}", null, parameterList);
		MethodExpressionActionListener listener2 = new MethodExpressionActionListener(me2); 
		
		menuItemAjouterPersonne.addActionListener(listener2);
		
		childrenGroupPersonnes.add(menuItemAjouterPersonne);
		
		childrenGroupMenu.add(panelMenuGroupPersonne);
		
	}
	
	
	
	//Activation du menu	
	public void afficherMenu(boolean b){
		panelMenu.setRendered(b);
	}
	
	//Getteurs Setteurs
	
	public void setPanelMenu(final HtmlPanelMenu panelMenu) {
		this.panelMenu = panelMenu;
	}
	
	public HtmlPanelMenu getPanelMenu() {
		return panelMenu;
	}
}
